<?php




/*
骏卡支付API
注：骏卡支付异步通知较慢，提交成功后直接调查询接口，异步通知作为二次确认；
*/


//对卡号密码进行3des加密
function desdata($encrypted_hex,$deskey)
{

    // 进行 3DES 加密
    $encrypted = openssl_encrypt($encrypted_hex, 'des-ede3', $deskey, OPENSSL_RAW_DATA);

    // 将加密结果转换为十六进制字符串
    $newencrypted = bin2hex($encrypted);

    return $newencrypted;
}
$deskey = 'DA95D1144CE146CB89130E1A';//3deskey
$desdata = '2310192225830501,1111111111111111';//加密前卡号密码
$New_card_data = desdata($desdata,$deskey);//加密后授权码
echo $New_card_data;
echo "<br/><hr>";

//生成随机单号

$number = mt_rand(13021003,999999999);
echo $number;
echo "<br/><hr>";

//获取时间戳
$currentTime = date("YmdHis");


/*
  goods_detail处理；
   注：1.商品描述信息（非必填），长度不能超过250 {"id":"商品编号"," name":"商品名称","num":"商品数量","price":"商品单价"," url":"商品展示地址"}
*/

$String = array(
    "id" => '123',
    "name" => '测试商品',
    "num" => '1',
    "price" => '0.01',
    "url" => 'www.baidu.com'
);
$New_goods_detail =json_encode($String,JSON_UNESCAPED_UNICODE);
echo 'goods_detail的原始值'.$New_goods_detail;
echo "<br/><hr>";




//定义参数值
$agent_id = '1664502';//商户编号
$ref_agent_id = '';//二级商户号（集团商户模式传参），传了必须参与签名放在key后面
$card_type = '10';//固定值：10
$bill_id = $number;//商户内部订单号
$bill_time = $currentTime;//提交单据的时间yyyyMMddHHmmss
$card_data = $New_card_data;//骏卡一卡通最多支持5张,格式为：卡号1,密码1,金额1丨卡号2，密码2,金额2丨卡号3，密码3，金额3），必填,双方协商的对称加密,使用3DES加密,合作方不能保存记录卡密, （金额支持小数点后2位）
$pay_amt = '0.01';//订单金额
$notify_url = 'https://';//异步通知地址
$client_ip = ' 127_127_12_12 ';//用户所在客户端的真实ip其中的"."替换为"_" 。
$desc = '';//简要说明（可不传）
$ext_param = '测试';//商户自定义参数或扩展参数，接口按原值返回（可不传）
$goods_detail = $New_goods_detail;//商品描述信息
$time_stamp= $number;// 提交时间戳(必填格式为yyyyMMddHHmmss 4位年+2位月+2位日+2位时+2位分+2位秒，不足14位用0补齐。)
$key = '651886F030134F848F548A12';//密钥
$is_guarantee = true;//是否需要分润//is_guarantee=1代表分润单（选填） 如果需要分润，此参数必填；不调分润资金不会结算，需要base64，再urlencode（不需要参与签名）



//请求参数中，中文需要GBK格式  URLencode编码

$GBKext_param = iconv('UTF-8', 'GBK', $ext_param);
$New_remark = urlencode($GBKext_param );



// 请求参数（使用 & 符号拼接）注：如果有子商户则子商户字段传值。

if (empty($ref_agent_id)){
    $data = "agent_id=$agent_id&bill_id=$bill_id&bill_time=$bill_time&card_type=$card_type&card_data=$card_data&pay_amt=$pay_amt&notify_url=$notify_url&time_stamp=$time_stamp|||$key";
    echo '待加密数据-------------->'.$data;
    echo "<br/><hr>";
    $sign = md5($data);
    echo '加密后数据'.$sign;
    echo "<br/><hr>";
    $param = "agent_id=$agent_id&bill_id=$bill_id&bill_time=$bill_time&card_type=$card_type&card_data=$card_data&pay_amt=$pay_amt&notify_url=$notify_url&time_stamp=$time_stamp&sign=$sign&ext_param=$ext_param";
    echo '待请求参数-------------->'.$param;
    echo "<br/><hr>";
}else{
    $data = "agent_id=$agent_id&bill_id=$bill_id&bill_time=$bill_time&card_type=$card_type&card_data=$card_data&pay_amt=$pay_amt&notify_url=$notify_url&time_stamp=$time_stamp|||$key&ref_agent_id=$ref_agent_id";
    echo '待加密数据-------------->'.$data;
    echo "<br/><hr>";
    $sign = md5($data);
    echo '加密后数据'.$sign;
    echo "<br/><hr>";
    $param = "agent_id=$agent_id&bill_id=$bill_id&bill_time=$bill_time&card_type=$card_type&card_data=$card_data&pay_amt=$pay_amt&notify_url=$notify_url&time_stamp=$time_stamp&sign=$sign&ext_param=$ext_param&ref_agent_id=$ref_agent_id";
    echo '待请求参数-------------->'.$param;
    echo "<br/><hr>";
}

//请求地址
$url = 'https://pay.Heepay.com/Api/CardPaySubmitService.aspx';

// 构建请求上下文
$options = array(
    'http' => array(
        'method' => 'POST',
        'header' => 'Content-Type: application/x-www-form-urlencoded',
        'content' => $param
    )
);
$context = stream_context_create($options);

// 发送 POST 请求
$response = file_get_contents($url, false, $context);


echo $response;


